print("----------------第一个操作------------------")


class MyString:  # 定义类
    myStr = "我爱你中国"  # 定义成员属性

    def myPrint(self):  # 定义成员方法
        print(self.myStr)


ms1 = MyString()  # 创建实例
ms1.myPrint()  # 调用类的成员属性
print(ms1.myStr)  # 调用类的成员方法
print("----------------第二个操作------------------")


class Dog:
    legs = 4  # 类属性


d1 = Dog()
# 修改属性legs的值，相当于重新定义了一个相同名字的属性，而不是修改的类中的属性值d1.legs = 5
print("d1对象的腿的数量为：", d1.legs)
# 打印legs属性，该属性的值还是原来的"4"，证明d1对象修改无效
print("Dog类的腿的数量为：", Dog.legs)
print("----------------第三个操作------------------")


class Dog(object):
    legs = 4

    def __init__(self, name, age, sex):  # 添加实例属性name、age、sex
        self.name = name
        self.age = age
        self.sex = sex


d1 = Dog("贝贝", 3, "男")
d1.color = "yellow"  # 添加自定义属性yellow
print("我叫{0}，我{1}岁了，我是{2}狗".format(d1.name, d1.age, d1.sex))
print("我的毛色为：", d1.color)
print("----------------第四个操作------------------")


class Dog(object):
    legs = 4  # 类属性
    color = "yellow"  # 类属性


d1 = Dog()  # 创建对象d1
d1.color = "black"
d2 = Dog()  # 创建对象d2
print("d1的颜色为：", d1.color, "，d2的颜色为：", d2.color)
print("----------------第五个操作------------------")


class Dog:
    def __init__(self):
        print("小狗汪汪叫...")

    def gnawBone(self):  # 定义实例方法
        print("小狗啃骨头！")


d1 = Dog()
d1.gnawBone()  # 外部调用通过对象名.方法名()调用
# Dog.gnawBone() #错误，类名.方法名调用会报错
